package com.weichen.studentgameexchange.message.entity.vo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.weichen.studentgameexchange.common.enums.MessagePriority;
import com.weichen.studentgameexchange.common.enums.MessageStatus;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 
 * </p>
 *
 * @author 惟尘
 * @since 2025-02-08
 */
@Getter
@Setter
@ToString
@Schema(name = "MessageVo对象", description = "分页对象页面视图")
public class MessageVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 消息ID，主键，唯一标识一条消息
     */
    @Schema(description = "消息ID，主键，唯一标识一条消息")
    private Long messageId;

    /**
     * 发送者ID，关联用户表（studentgameexchange-user.user.user_id）
     */
    @Schema(description = "发送者ID，关联用户表（studentgameexchange-user.user.user_id）")
    private Long senderId;

    /**
     * 接收者ID，关联用户表（studentgameexchange-user.user.user_id）
     */
    @Schema(description = "接收者ID，关联用户表（studentgameexchange-user.user.user_id）")
    private Long receiverId;

    /**
     * 消息类型ID，关联消息类型表（message_type.type_id）
     */
    @Schema(description = "消息类型ID，关联消息类型表（message_type.type_id）")
    private Long typeId;


    /**
     * 关联的业务ID（允许为NULL，表示无关联）
     */
    @Schema(description = "关联的业务ID（允许为NULL，表示无关联）")
    private Long relatedId;

    /**
     * 消息标题
     */
    @Schema(description = "消息标题")
    private String title;

    /**
     * 消息内容
     */
    @Schema(description = "消息内容")
    private String content;

    /**
     * 消息发送时间
     */
    @Schema(description = "消息发送时间")
    private LocalDateTime sendTime;

    /**
     * 阅读状态（0-未读，1-已读）
     */
    @Schema(description = "阅读状态（0-未读，1-已读）")
    private MessageStatus readStatus;

    /**
     * 优先级（0-普通，1-重要，2-紧急）
     */
    @Schema(description = "优先级（0-普通，1-重要，2-紧急）")
    private MessagePriority priority;

    /**
     * 消息过期时间（超过此时间不再显示）
     */
    @Schema(description = "消息过期时间（超过此时间不再显示）")
    private LocalDateTime expiryTime;

    /**
     * 逻辑删除（0-正常，1-已删除）
     */
    @Schema(description = "逻辑删除（0-正常，1-已删除）")
    private Integer deleted;

    /**
     * 关联的评论ID，关联评论表（comment.comment_id）
     */
    @Schema(description = "关联的评论ID，关联评论表（comment.comment_id）")
    private Long commentId;

    /**
     * 关联的攻略ID，关联攻略表（strategy.strategy_id）
     */
    @Schema(description = "关联的攻略ID，关联攻略表（strategy.strategy_id）")
    private Long strategyId;

    /**
     * 关联的活动ID，关联活动表（activity.activity_id）
     */
    @Schema(description = "关联的活动ID，关联活动表（activity.activity_id）")
    private Long activityId;

    /**
     * 关联的游戏ID，关联游戏表（game.game_id）
     */
    @Schema(description = "关联的游戏ID，关联游戏表（game.game_id）")
    private Long gameId;

    /**
     * 消息类型名称（如“评论回复”、“攻略审核”等）
     */
    @Schema(description = "消息类型名称（如“评论回复”、“攻略审核”等）")
    private String typeName;
}
